﻿#pragma once
#ifndef GAMECONTROL_H
#define GAMECONTROL_H

#include <QObject>

#include "cards.h"
#include "robot.h"
#include "userplayer.h"

//游戏控制逻辑
class GameControl : public QObject {
	Q_OBJECT
public:
	// 游戏状态 1、发牌  2、开始游戏  3、开始轮流下去
	enum GameStatus { DispatchCard, Onbet, PlayingHand };

	explicit GameControl(QObject* parent = nullptr);

	// 初始化四个玩家
	void playerInit();

	// 得到玩家的实例对象
	UserPlayer* getLeft();
	UserPlayer* getRight();
	UserPlayer* getTop();
	UserPlayer* getUserPlayer();

	// 当前正在考虑的玩家
	void setCurrentPlayer(Player* player);
	Player* getCurrentPlayer();

	// 初始化扑克牌
	void initAllCards();
	// 每次发一张牌
	Card takeOneCard();
	// 重置卡牌数据
	void resetCardData();
	// 设置起始筹码，每人50
	void setStartScore();
	int getCardsNumber();
	// 成为地主
	void becomeLord(Player* player);
	// 清空所有玩家的得分
	void clearPlayerScore();
	// 得到玩家下注的最高分数
	int getPlayerMaxBet();

signals:
	// 游戏状态变化
	void gameStatusChanged(GameStatus status);

private:
	//四个真人玩家
	UserPlayer* m_Left = nullptr;
	UserPlayer* m_Right = nullptr;
	UserPlayer* m_Top = nullptr;
	UserPlayer* m_user = nullptr;

	Player* m_currPlayer = nullptr;  // 当前玩家
	Cards m_allCards;                // 一副牌
	int max_bet;                     // 当前轮次的最高下注
};

#endif  // GAMECONTROL_H
